perm filename ERRATA.TEX[TEX,DEK]59 blob sn#831620 filedate 1987-01-05 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	% Bugs (sigh) in Computers \& Typesetting
C00005 00003	% volume A
C00015 00004	% volume B
C00029 00005	% volume C
C00040 00006	% Volume D
C00057 00007	% volume E
C00062 00008	\bye
C00063 00009	Now here are some that I will make soon!
C00066 ENDMK
C⊗;
% Bugs (sigh) in Computers \& Typesetting

\input manmac
\font\sltt=cmsltt10
\font\niness=cmss9
\font\ninessi=cmssi9
\proofmodefalse
\raggedbottom
\output{\hsize=29pc \onepageout{\unvbox255\kern-\dimen@ \vfil}}

\def\cutpar{{\parfillskip=0pt\par}}

\def\rhead{Bugs in {\tensl Computers \& Typesetting}}
\def\bugonpage#1(#2) \par{\bigbreak\tenpoint
  \hrule width\hsize
  \line{\lower3.5pt\vbox to13pt{}Page #1\hfil(#2)}\hrule width\hsize
  \nobreak\medskip}
\def\buginvol#1(#2) \par{\bigbreak\penalty-1000\tenpoint
  \hrule width\hsize
  \line{\lower3.5pt\vbox to13pt{}Volume #1\hfil(#2)}\hrule width\hsize
  \nobreak\medskip}
\def\slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo
\def\0{\raise.7ex\hbox{$\scriptstyle\#$}}
\newcount\nn
\newdimen\nsize \newdimen\msize \newdimen\ninept \ninept=9pt
\newbox\eqbox \setbox\eqbox=\hbox{\kern2pt\eightrm=\kern2pt}

\noindent This is a list of all corrections made to {\sl Computers \&
Typesetting}, Volumes A--E\null. It also includes all corrections made to
the softcover version of {\sl The \TeX book}, beginning with the
sixth printing (January 1986); these are the same as corrections to
Volume~A\null. Corrections to the softcover version of {\sl The
\slMF\kern1ptbook\/} are the same as corrections to Volume~C\null.
% volume A
\bugonpage A7, fourth line from the bottom (6/28/86)

\tenpoint\line{%
since control sequences of the second kind always have exactly one
symbol after}

\bugonpage A43, lines 8--9 (8/23/86)

\tenpoint\noindent
of Appendix B\null, which defines |%| to be a special kind of symbol so that you
can use it for comments, defines the control sequence |\%| to mean
a percent sign.

\bugonpage A45, lines 10--13 (8/23/86)

\ninepoint\noindent
\TeX\ adds~64. Hence
code 127 can be typed |↑↑?|, and
the dangerous bend sign can be obtained by saying
|{\manual↑↑?}|. However, you must change the category code of character
127 before using it, since this character ordinarily has category~15
(↑{invalid}); say, e.g., |\catcode`\↑↑?=12|.
The |↑↑| notation is different from |\char|, because |↑↑|\cutpar

\bugonpage A76, line 7 (8/23/86)

\ninepoint
\noindent
and extra space; for example, these quantities are
$3.33333\pt$, $1.66666\pt$, $1.11111\pt$,\cutpar

\bugonpage A83, bottom line (10/13/86)

\rightline{\eightss--- JAN TSCHICHOLD, {\eightssi Typographische
 Gestaltung\/} (1935)}

\bugonpage A171, line 20 (1/26/86)

\ninepoint\line{%
will be surrounded by more space than there would be
if that subformula were enclosed}

\bugonpage A176, line 1 (8/23/86)

\ninepoint
You can insert `|\noalign||{|$\langle$vertical mode
material$\rangle$|}|' just after any \kern-1pt|\cr| within\cutpar

\bugonpage A248, line 17 (6/17/86)

\ninepoint
`|&|' or `|\span|' or `|\cr|', it needs some way to decide which
alignment is involved.\cutpar

\bugonpage A249, line 20 (6/17/86)

\ninepoint\noindent
line (see Chapter~8).
If you don't want a~|\cr| at the end of a certain line,
just type\cutpar

\bugonpage A276, line 19 (1/27/86)

\ninepoint\vskip-3pt
\beginsyntax
  \alt↑|\font|<control sequence><equals><file name><at clause>
  \alt<global assignment>
\endsyntax
[The bottom line of p.~276 will now move to the top of p.~277.]

\bugonpage A277, lines 31--32 (1/27/86)

\ninepoint
\beginsyntax
<font assignment>\is↑|\fontdimen|<number><font><equals><dimen>
\endsyntax

\bugonpage A312, lines 10--14 (8/23/86)

\ninepoint
\ansno12.11: The interline glue will be zero, and the natural height is
$1+1-3+2=1\pt$ (because the depth of\/ |\box2| isn't included in the natural
height); so the glue will ultimately become |\vskip-1pt| when it's set.
Thus, |\box3| is $3\pt$ high, $2\pt$ deep, $4\pt$ wide. Its reference
point coincides with that of\/ |\box2|; to get to the reference point
of\/ |\box1| you go up $2\pt$ and right $3\pt$.

\bugonpage A312, line 21 (8/23/86)

\ninepoint\noindent
up $4\pt$ to get to the upper left corner of
|\box4|; then down $-1.6\pt$, i.e., up $1.6\pt$, to\cutpar

\bugonpage A329, lines 14--15 (8/23/86)

\ninepoint
\ansno20.5: The |##| feature is indispensable when the replacement text of
a definition contains other definitions. For example, consider

\bugonpage A357, tenth-last line (10/13/86)

\ninepoint\noindent
|\let\sp=↑ \let\sb=_        {\catcode`\_=\active \global\let_=\_}|

\bugonpage A364, fifth-last line (10/13/86)

\ninepoint\noindent
|\def\fmtname{plain}\def\fmtversion{2.1} % identifies the current format|

\bugonpage A368, bottom line (2/26/86)

\ninepoint
\line{that includes the symbols
{\tentex\char'30},~{\tentex\char1}, {\tentex\char'32}, {\tentex\char'34},
and~{\tentex\char'35}, and he finds that this makes it much more}

\bugonpage A396, line 13 (8/23/86)

\ninepoint
|  \hyphenpenalty=10000 \exhyphenpenalty=10000|

\bugonpage A414, line 10 (3/4/86)

\ninepoint\noindent
|\font\titlefont=cmssdc10 at 40pt   % titles in chapter openings|

\bugonpage A427, line 7 (2/23/86)

\ninepoint\noindent
the author's book
{\sl Computer Modern Typefaces}.)

\bugonpage A434, lines 25--28 (8/17/86)

\tenpoint\noindent
from |\nu|~($\nu$). Similarly,
|\varsigma|~($\varsigma$) should not be confused with |\zeta|~($\zeta$).
It turns out that |\varsigma| and |\upsilon| are almost never used in
math formulas; they are included in plain \TeX\ primarily because they are
sometimes needed in short Greek citations (cf.~Appendix~J).

\bugonpage A458, right column, line 10 (11/27/86)

\eightpoint {\tt\char`\~}
(tilde), 38, 51, 343, $\underline{353}$; {\sl see also\/} ties.

\bugonpage A461, entry for {\tt\char`\\centering} (1/28/86)

\eightpoint {\tt\char`\\centering}, $\underline{347}$, 348, 362.

\bugonpage A462, entry for \<code assignment> (1/27/86)

\eightpoint \<code assignment>, $\underline{277}$.

\bugonpage A466, entry for {\tt\char`\\font}, second line (1/27/86)

\eightpoint \indent\qquad 271, $\underline{276}$.

\bugonpage A467, entry for {\tt\char`\\hideskip} (1/28/86)

\eightpoint {\tt\char`\\hideskip}, $\underline{347}$, 348, 354.

\bugonpage A470, entry for {\tt manfnt} (1/15/86)

\eightpoint {\tt manfnt}, 44, 408, 414.

\bugonpage A471, entry for {\tt\char`\\medbreak} (10/13/86)

\eightpoint {\tt\char`\\medbreak}, 111, 113, $\underline{353}$,
 {\it355}, {\it419}, {\it422}.

\bugonpage A471, entry for Mozart, second line (3/19/86)

\eightpoint \indent\qquad Gottlieb (= Theophilus = Amadeus), 409.

\bugonpage A479, entry for ties, second line (11/27/86)

\eightpoint \indent\qquad {\it173}, 353, {\it404}.

\bugonpage A480, changes to various entries (10/25/86)

\eightpoint
\newbox\astbox \setbox\astbox=\hbox to0pt{\hss\lower1pt\hbox{*}}
\def\prim#1{\par\indent\copy\astbox{\tt\char`\\#1}}
\prim{underline}, {\it130--131}, 141, 291, 443.
\prim{unhbox}, 120, 283, $\underline{285}$, {\it354}, {\it356}, {\it361},
 {\it399}.
\prim{unhcopy}, 120, 283, $\underline{285}$, {\it353}.
\prim{unkern}, $\underline{280}$.
\prim{unpenalty}, $\underline{280}$.
\prim{unskip}, 222--223, $\underline{280}$, 286, {\it313}, {\it392},
 {\it418--419}.
\prim{unvbox}, 120, 254, $\underline{282}$, 286, {\it354}, {\it361},
 {\it363}, {\it364}, {\it392}, {\it399}, {\it417}.
\prim{unvcopy}, 120, $\underline{282}$, 286, {\it361}.
\prim{vadjust}, 95, 105, 109, 110, 117, 259, $\underline{281}$, 393, 454.
\prim{valign}, 249, 283, $\underline{285}$--$\underline{286}$, 302,
 {\it335}, {\it397}.

% volume B
\hsize=34pc
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\to{\mathrel{.\,.}} % double dot, used only in math mode

\buginvol B, in general (7/28/86)

\tenpoint\noindent
[A number of entries were mistakenly omitted from the mini-indexes
on the right-hand pages. Here is a combined list of all the missing
items; you can mount it inside the back cover, say, as a secondary mini-index
when the first one fails\dots\ ]

\nobreak\medskip
\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_
  \rightskip=0pt plus 100pt minus 10pt
  \pretolerance 10000
  \hyphenpenalty 10000 \exhyphenpenalty 10000
  \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept
  \def\{\hbox{\bf#1\/}} % boldface type for reserved words
  \obeylines
  \def\makeref #1 #2 #3#4
   {\nn=#2 \hangindent=1em \noindent\\{#1}%
    \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par}
  \makeref active_base 222 =$1$
  \makeref aux 213 =macro
  \makeref begin_name 515 :\&{procedure}
  \makeref big_switch 1030 =$60$
  \makeref choice_node 689 =$15$
  \makeref cur_boundary 271 :$0\to \\{save\_size}$
  \makeref cur_c 724 :\\{quarterword}
  \makeref cur_group 271 :\\{group\_code}
  \makeref cur_i 724 :\\{four\_quarters}
  \makeref cur_level 271 :\\{quarterword}
  \makeref do_extension 1348 :\&{procedure}
  \makeref dvi_buf 595 :\&{array}
  \makeref dvi_gone 595 :\\{integer}
  \makeref dvi_limit 595 :\\{dvi\_index}
  \makeref dvi_offset 595 :\\{integer}
  \makeref dvi_ptr 595 :\\{dvi\_index}
  \makeref end_graf 1096 :\&{procedure}
  \makeref error 82 :\&{procedure}
  \makeref error_stop_mode 73 =$3$
  \makeref font_base 12 =$0$
  \makeref font_info 549 :\&{array}
  \makeref get_token 365 :\&{procedure}
  \makeref glue_base 222 =$2626$
  \makeref half_buf 595 :\\{dvi\_index}
  \makeref handle_right_brace 1068 :\&{procedure}
  \makeref hash_base 222 =$258$
  \makeref head 213 =macro
  \makeref hyf_distance 921 :\&{array}
  \makeref hyf_next 921 :\&{array}
  \makeref hyf_num 921 :\&{array}
  \makeref index 302 =macro
  \makeref inf 448 :\\{boolean}
  \makeref init_col 788 :\&{procedure}
  \makeref init_span 787 :\&{procedure}
  \makeref input_ln 31 :\&{function}
  \makeref interaction 73 :$0\to 3$
  \makeref limit 302 =macro
  \makeref line_width 830 :\\{scaled}
  \makeref macro_call 389 :\&{procedure}
  \makeref main_control 1030 :\&{procedure}
  \makeref mem 116 :\&{array}
  \makeref mem_bot 12 =$0$
  \makeref mem_end 118 :\\{pointer}
  \makeref mem_top 12 =macro
  \makeref mlist_to_hlist 726 :\&{procedure}
  \makeref mode 213 =macro
  \makeref mode_line 213 =macro
  \makeref more_name 516 :\&{function}
  \makeref mu 448 :\\{boolean}
  \makeref name 302 =macro
  \makeref nest 213 :\&{array}
  \makeref off_save 1064 :\&{procedure}
  \makeref open_log_file 534 :\&{procedure}
  \makeref output_active 989 :\\{boolean}
  \makeref p 498 :\\{pointer}
  \makeref param_stack 308 :\&{array}
  \makeref pool_file 50 :\\{alpha\_file}
  \makeref pool_ptr 39 :\\{pool\_pointer}
  \makeref prefixed_command 1211 :\&{procedure}
  \makeref prev_depth 213 =macro
  \makeref prev_graf 213 =macro
  \makeref prev_prev_r 830 :\\{pointer}
  \makeref print_err 73 =macro
  \makeref r 960 :\\{trie\_pointer}
  \makeref reconstitute 906 :\&{function}
  \makeref resume_after_display 1200 :\&{procedure}
  \makeref save_ptr 271 :$0\to \\{save\_size}$
  \makeref save_stack 271 :\&{array}
  \makeref scan_dimen 448 :\&{procedure}
  \makeref scan_math 1151 :\&{procedure}
  \makeref short_display 174 :\&{procedure}
  \makeref show_node_list 182 :\&{procedure}
  \makeref start 302 =macro
  \makeref state 302 =macro
  \makeref str_pool 39 :\&{packed}\ \&{array}
  \makeref str_ptr 39 :\\{str\_number}
  \makeref str_start 39 :\&{array}
  \makeref tail 213 =macro
  \makeref trap_zero_glue 1229 :\&{procedure}
  \makeref trie 921 :\&{array}
  \makeref trie_char 921 =macro
  \makeref trie_link 921 =macro
  \makeref trie_op 921 =macro
  \makeref vlist_out 629 :\&{procedure}
  \makeref write_loc 1345 :\\{pointer}
  }
\hbox{\nsize=\ht0 \advance\nsize-\topskip
  \divide\nsize by 3 \divide\nsize by\ninept
  \multiply\nsize by\ninept \advance\nsize\topskip
  \vsplit0 to\nsize \kern1pc
  \msize=\ht0 \advance\msize-\topskip
  \divide\msize by 2 \divide\msize by\ninept
  \multiply\msize by\ninept \advance\msize\topskip
  \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc
  \vbox to\nsize{\box0\vss}}

\bugonpage Bvi, bottom line, and top line of next page (10/12/86)

{\hsize=29pc
\tenpoint\noindent
puter Science Report 1097 (Stanford, California, April 1986), 146~pp.
\ {\it The {\sltt WEB} programs for four utility programs that are
often used with \TeX: {\sltt POOLtype}, {\sltt TFtoPL},
{\sltt PLtoTF}, and {\sltt DVItype}.}
\par}

\bugonpage B18, line 30 (5/22/86)

\ninepoint\noindent
\\{str\_ptr}: \\{str\_number};\quad
$\{\,$number of the current string being created$\,\}$

\bugonpage B58, second line of section 136 (7/23/86)

\tenpoint\noindent
the values corresponding to `|\hbox{}|'. The \\{subtype} field is set to
\\{min\_quarterword}, since that's\cutpar

\bugonpage B86, third line of section 210 (8/23/86)

\tenpoint\noindent
that their special nature is easily discernible.
The ``expandable'' commands come first.

\bugonpage B88, line 23 (5/22/86)

\ninepoint\noindent
{\bf procedure\/}\  $\\{print\_mode}(m:\\{integer})$;\quad
$\{\,$prints the mode represented by $m\,\}$

\bugonpage B93, lines 3--4 (8/17/86)

{\tenpoint\parindent=1em
In the first region we have 128 equivalents for ``active characters'' that
act as control sequences, followed by 128 equivalents for single-character
control sequences.
\par}

\bugonpage B160, lines 17--20 (7/28/86)

\tenpoint\noindent
{\bf 389.\quad}%
After parameter scanning is complete, the parameters are moved to the
\\{param\_stack}. Then the macro body is fed to the scanner; in other words,
\\{macro\_call} places the defined text of the control sequence at the
top of\/ \TeX's input stack, so that \\{get\_next} will proceed to read it
next.

\bugonpage B224, lines 4--7 of section 560 (10/22/86)

\tenpoint\noindent
name and area strings \\{nom} and \\{aire}, and the
``at'' size~$s$. If $s$~is negative, it's the negative of a scale factor
to be applied to the design size; $s=-1000$ is the normal case.
Otherwise $s$ will be substituted for the design size; in this
case, $s$ must be positive and less than $2048\rm\,pt$
(i.e., it must be less than $2↑{27}$ when considered as an integer).

\bugonpage B271, line 10 (8/23/86)

\tenpoint\noindent
which will be ignored in the calculations
because it is a highly negative number.

\bugonpage B422, line 24 (8/23/86)

\ninepoint\noindent
\hskip20pt\\{prev\_p}: \\{pointer};\quad
$\{\,$predecessor of $p\,\}$

\bugonpage B435, line 16 (10/12/86)

\ninepoint\noindent
\hskip20pt$\\{width}(p)\gets\\{font\_info}[k].\\{sc}$;\quad
$\{\,$that's \\{space}$(f)\,\}$\par\noindent
\hskip20pt$\\{stretch}(p)\gets\\{font\_info}[k+1].\\{sc}$;\quad
$\{\,$and \\{space\_stretch}$(f)\,\}$\par\noindent
\hskip20pt$\\{shrink}(p)\gets\\{font\_info}[k+2].\\{sc}$;\quad
$\{\,$and \\{space\_shrink}$(f)\,\}$\par
\smallskip\eightpoint\noindent
[And the mini-index gets three new entries:
$\\{space}=macro$, \S558.
$\\{space\_shrink}=macro$, \S558.
$\\{space\_stretch}=macro$, \S558.]

\bugonpage B510, line 8 (12/15/86)

\ninepoint\noindent\hskip30pt
({\tt"Pretend\]that\]you're\]Hercule\]Poirot:\]Examine\]all\]clues,"})

\bugonpage B527, new line to follow line 13 (6/17/86)

{\tenpoint\parindent=1em
This program doesn't bother to close the input files that may still be open.
\par}

\bugonpage B555, right column, new entry (10/25/86)

\eightpoint
\leftline{{\tt Huge page...},\quad 641.}

\bugonpage B569, right column, in appropriate places (10/12/86)

\eightpoint
\leftline{\\{space}:\quad 547, $\underline{558}$, 752, 755, 1042.}
\leftline{\\{space\_shrink}:\quad 547, $\underline{558}$, 1042.}
\leftline{\\{space\_stretch}:\quad 547, $\underline{558}$, 1042.}

\bugonpage B571, right column (10/25/86)

\eightpoint
\leftline{{\tt The following...deleted},\quad 641, 992, 1121.}

% volume C
\hsize=29pc

\bugonpage C54, sixth-last to fourth-last lines (10/13/86)

\ninepoint Jonathan H. Quick (a student) used `|a.plus1|' as the name
of a variable at the beginning of his program; later he said `|let|
|plus=+|'. How could he refer to the variable `|a.plus1|' after that?

\bugonpage C76, line 14 (10/13/86)

\tenpoint
\newdimen\longesteq
\setbox0=\hbox{\indent$z_{12}-z_{11}=z_{14}-z_{13}$\quad}
\longesteq=\wd0
\noindent\hbox to \longesteq{\indent
  $x_4=w-.01\\{in}$\hfil}%
Point 4 should be one-hundredth of an inch inside\cutpar

\bugonpage C103, line 12 (10/12/86)

\tenpoint
$\\{ht}\0=\\{body\_height}\0$; \ $.5[\\{ht}\0,-\\{dp}\0]=\\{axis}\0$;

\bugonpage C105, line 13 (10/13/86)

\ninepoint
The vertical line just to the right of the italic left parenthesis
shows the italic\cutpar

\bugonpage C113, lines 20--27 (8/23/86)

{\catcode`\@=\active
\def@#1@{\begingroup\def\_{\kern.04em
    \vbox{\hrule width.3em height .6pt}\kern.08em}%
  \ifmmode\mathop{\bf#1}\else\hbox{\bf#1\/}\fi\endgroup}
\danger The command `@erase@ @fill@ $c$' is an abbreviation for
`@cullit@; @unfill@~$c$; @cullit@'; this zeros out the pixel values inside
the cyclic path~$c$, and sets other pixel values to~1 if they were positive
before erasing took place. \ (It works because the initial @cullit@ makes
all the values 0 or~1, then the @unfill@ changes the values inside~$c$
to 0 or negative. The final @cullit@ gets rid of the negative values,
so that they won't detract from future filling and drawing.) \ You can
also use `@draw@', `@filldraw@', or `@drawdot@' with `@erase@'; for example,
`@erase@ @draw@~$p$' is an abbreviation for `@cullit@; @undraw@~$p$;
@cullit@', which uses the currently-picked-up pen as if it were an
eraser applied to path~$p$.

}

\bugonpage C124, line 9 (6/17/86)

\eightpoint
\noindent\hskip1.8in
$\\{branch}_2=\\{flex}((30,570),(10,590),(-1,616))$

\bugonpage C130, 3rd-last line (9/25/86)

\ninepoint\noindent
{\sl Geometry\/ \bf 1} (1986), 123--140]: Given a sequence

\bugonpage C144, sixth line of the program (8/23/86)

\ninepoint\noindent\hbox to\parindent{\hfil\sevenrm6\ \ \ }%
$y_2=.1h$; \ $\\{top}\,y_3=.4h$;

\bugonpage C148, the line before the illustration (11/27/86)

\ninepoint\noindent
are polygons with 32 and 40 sides, respectively:

\smallskip\noindent
[New illustrations are needed here, since \MF\ version 1.3 improves
the accuracy of pen polygons.]

\bugonpage C149, 7th line after the illustration (10/24/86)

\ninepoint
\line{$(200,y+100\pm\alpha)$, where
$\alpha=\sqrt5/4\approx0.559$. If we digitize these outlines and fill the}

\bugonpage C178, second-last line (8/23/86)

\ninepoint\noindent
(If $t_3=t_1$~transum~$t_2$, then
$z$~transformed~$t_3=z$~transformed~$t_1+z$~transformed~$t_2$,\cutpar

\bugonpage C198, fifth-last and fourth-last lines (10/13/86)

\ninepoint\vskip-3pt
\begindisplay
$\\{top}\,y_2={\rm round}(\\{top}\,\beta)$.
\enddisplay
Such operations occur frequently in practice, so plain \MF\ provides
convenient\cutpar

\bugonpage C212, lines 9--11 from the bottom (8/23/86)

\ninepoint
\qquad
 \alt\[point]\<numeric expression>\[of]\<path primary>\continuerule
 \alt\[precontrol]\<numeric expression>\[of]\<path primary>\continuerule
 \alt\[postcontrol]\<numeric expression>\[of]\<path primary>

\bugonpage C247, lines 23--25 (11/27/86)

\ninepoint
\ansno 16.2:
 `{\bf pencircle} scaled 1.06060' is the diamond but
`{\bf pencircle} scaled 1.06061' is~the square. \ (This assumes that
$\\{fillin}=0$. If, for example, $\\{fillin}=.1$, the change doesn't
occur until the diameter is 1.20204.) \ The next change is at diameter
1.5, which\cutpar

\bugonpage C262, lines 1--4 (7/28/86)

\ninepoint
When we come to macros whose use has not yet been explained---for
example, somehow |softjoin| and |stop| never made it
into Chapters 1 through~27---we shall consider them from a user's
viewpoint. But most of the comments that follow are addressed to a
potential base-file designer.

\bugonpage C266, line 16 (8/17/86)

\ninepoint\noindent
variables; they have the side effect of changing the variable's value.

\bugonpage C276, line 26 (6/23/86)

\ninepoint
\noindent
| if charic<>0: r((w+charic*hppp,h.o_),(w+charic*hppp,.5h.o_)); fi|

\bugonpage C286, lines 24--26 (10/13/86)

\ninepoint\noindent
but \MF\ won't let you. And even if this had worked, it wouldn't have
solved the problem; it would simply have put |ENDFOR| into the
replacement text of |ast|, because expansion is inhibited when the
replacement text is being read.

\bugonpage C290, line 1 (8/23/86)

\ninepoint  \noindent{\it 2.\enspace Fortuitous loops.\enspace}%
The `↑{max}' and `↑{min}' macros in Appendix~B make use of the fact\cutpar

\bugonpage C298, third-last line (8/23/86)

\ninepoint
$t[\,u_1,\ldots,u_n]\;=\;t\bigl[t[u_1,\ldots,u_{n-1}],t[u_2,\ldots,u_n]\,\bigr]$

\bugonpage C307, fifth-last line (12/7/86)

\ninepoint
{\def\_{\kern.04em
    \vbox{\hrule width.3em height .6pt}\kern.08em}%
\bf adjust\_fit}(\<left sidebearing adjustment>,\thinspace
	\<right sidebearing adjustment>);

\bugonpage C312, line 34 (10/12/86)

\ninepoint\noindent
|params[2] = "sans_params";      fontname[2] = "cmssbx10";|

\bugonpage C316, lines 19--21 (8/17/86)

\ninepoint\noindent
example,
`|(some| |charht| |values| |had| |to| |be| |adjusted| |by| |as| |much|
|as| |0.12pt)|' means that~you had too many different nonzero heights, but
\MF\ found a way to reduce the number to at most~15 by changing some of
them; none of them had to be\cutpar

\bugonpage C319, line 3 (8/23/86)

\ninepoint\noindent
specified by saying, e.g.,

\bugonpage C321, line 6 (7/28/86)

\ninepoint\noindent
|  special "identifier " & font_identifier_;|

\bugonpage C334, line 2 (6/23/86)

\ninepoint\noindent
|  currentpicture := currentpicture shifted-(1,1); pix := currentpicture;|

\bugonpage C343, second-last line (8/23/86)

\rightline{\eightssi
the precise needs of a precise but limited intellectual goal.}

\bugonpage C348, line 6 (6/17/86)

\eightpoint
concatenation, of paths, {\eightit 70--71}, {\eightit 123}, 127,

\bugonpage C353, entry for {\tt mode\char`\_def} (8/17/86)

\eightpoint
{\tt mode\char`\_def}, 94, 189, $\underline{\smash{\hbox{\it 270}}}$,
{\it 278--279}.

\bugonpage C355, right column (4/15/86)

\eightpoint\noindent
(The entry for `{\tt rulepen}' belongs before the entry for `rules'.)

\bugonpage C355, right column (8/5/86)

\eightpoint
{\tt screenstrokes}, 191, $\underline{277}$.

\bugonpage C356, full names for the Stanfords (4/10/86)

\eightpoint
Stanford, Amasa Leland, 340.

Stanford, Jane Elizabeth Lathrop, 340.

% Volume D
\hsize=34pc
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\to{\mathrel{.\,.}} % double dot, used only in math mode

\buginvol D, in general (7/28/86)

\tenpoint\noindent
[A number of entries were mistakenly omitted from the mini-indexes
on the right-hand pages. Here is a combined list of all the missing
items; you can mount it inside the back cover, say, as a secondary mini-index
when the first one fails\dots\ ]

\nobreak\medskip
\setbox0=\vbox{\eightpoint \hsize=11pc \catcode`\_=\active \let_=\_
  \rightskip=0pt plus 100pt minus 10pt
  \pretolerance 10000
  \hyphenpenalty 10000 \exhyphenpenalty 10000
  \noindent\vbox to1pt{}\par % 1pt = \topskip - \ninept
  \def\{\hbox{\bf#1\/}} % boldface type for reserved words
  \obeylines
  \def\makeref #1 #2 #3#4
   {\nn=#2 \hangindent=1em \noindent\\{#1}%
    \if#3:: \else\unhcopy\eqbox \fi#4, \S\number\nn.\par}
  \makeref add_or_subtract 930 :\&{procedure}
  \makeref after 427 :\&{array}
  \makeref arg_list 720 :\\{pointer}
  \makeref b 580 :\\{pixel\_color}
  \makeref bad_exp 824 :\&{procedure}
  \makeref before 427 :\&{array}
  \makeref begin_name 770 :\&{procedure}
  \makeref bilin1 968 :\&{procedure}
  \makeref binary_mac 863 :\&{procedure}
  \makeref blank_rectangle 567 :\&{procedure}
  \makeref boc_c 1162 :\\{integer}
  \makeref boc_p 1162 :\\{integer}
  \makeref cf 298 :\\{fraction}
  \makeref clockwise 453 :\\{boolean}
  \makeref ct 298 :\\{fraction}
  \makeref cubic_intersection 556 :\&{procedure}
  \makeref cur_pen 403 :\\{pointer}
  \makeref cur_rounding_ptr 427 :$0\to \\{max\_wiggle}$
  \makeref cur_spec 403 :\\{pointer}
  \makeref cur_x 389 :\\{scaled}
  \makeref cur_y 389 :\\{scaled}
  \makeref dely 557 :\\{integer}
  \makeref dep_finish 935 :\&{procedure}
  \makeref dep_list 587 =macro
  \makeref dimen_head 1125 :\&{array}
  \makeref dx 495 :\\{integer}
  \makeref dy 495 :\\{integer}
  \makeref d1 464 :$0\to 1$
  \makeref end_name 772 :\&{procedure}
  \makeref eqtb 201 :\&{array}
  \makeref error_stop_mode 68 =$3$
  \makeref firm_up_the_line 682 :\&{procedure}
  \makeref get_next 667 :\&{procedure}
  \makeref gf_buf 1152 :\&{array}
  \makeref gf_offset 1152 :\\{integer}
  \makeref gf_ptr 1152 :\\{gf\_index}
  \makeref halfword 156 =$\\{min\_halfword}\to \\{max\_halfword}$
  \makeref hash 201 :\&{array}
  \makeref index 629 =macro
  \makeref input_ln 30 :\&{function}
  \makeref interaction 68 :$0\to 3$
  \makeref j 357 :$0\to \\{move\_size}$
  \makeref known_pair 872 :\&{procedure}
  \makeref limit 629 =macro
  \makeref m_spread 357 :\\{integer}
  \makeref materialize_pen 865 :\&{procedure}
  \makeref max_allowed 403 :\\{scaled}
  \makeref max_c 813 :\&{array}
  \makeref max_link 813 :\&{array}
  \makeref max_tfm_dimen 1130 :\\{scaled}
  \makeref mem_top 12 =macro
  \makeref mem 159 :\&{array}
  \makeref memory_word 156 =\&{record}
  \makeref more_name 771 :\&{function}
  \makeref m1 464 :\\{integer}
  \makeref n 580 :\\{screen\_col}
  \makeref n_sin_cos 145 :\&{procedure}
  \makeref name 629 =macro
  \makeref negate_dep_list 904 :\&{procedure}
  \makeref new_knot 871 :\&{function}
  \makeref node_to_round 427 :\&{array}
  \makeref n1 464 :\\{integer}
  \makeref octant_dir 395 :\&{array}
  \makeref o1 453 :\\{small\_number}
  \makeref o2 453 :\\{small\_number}
  \makeref paint_row 568 :\&{procedure}
  \makeref param 1096 :\&{array}
  \makeref param_stack 633 :\&{array}
  \makeref path_length 916 :\&{function}
  \makeref perturbation 1119 :\\{scaled}
  \makeref phi 542 :\\{angle}
  \makeref pool_ptr 38 :\\{pool\_pointer}
  \makeref post_head 843 :\\{pointer}
  \makeref pre_head 843 :\\{pointer}
  \makeref print_err 68 =macro
  \makeref print_macro_name 722 :\&{procedure}
  \makeref quarterword 156 =$0\to 255$
  \makeref recycle_value 809 :\&{procedure}
  \makeref row_transition 579 :\\{trans\_spec}
  \makeref scan_text_arg 730 :\&{procedure}
  \makeref scroll_mode 68 =$2$
  \makeref set_controls 299 :\&{procedure}
  \makeref sf 298 :\\{fraction}
  \makeref show_context 635 :\&{procedure}
  \makeref sorted 325 =macro
  \makeref st 298 :\\{fraction}
  \makeref start 629 =macro
  \makeref start_sym 1077 :\\{halfword}
  \makeref str_pool 38 :\&{packed}\ \&{array}
  \makeref str_ptr 38 :\\{str\_number}
  \makeref str_start 38 :\&{array}
  \makeref take_part 910 :\&{procedure}
  \makeref tfm_changed 1130 :\\{integer}
  \makeref tol 557 :\\{integer}
  \makeref tt 843 :\\{small\_number}
  \makeref tx 954 :\\{scaled}
  \makeref txx 954 :\\{scaled}
  \makeref txy 954 :\\{scaled}
  \makeref ty 954 :\\{scaled}
  \makeref tyx 954 :\\{scaled}
  \makeref tyy 954 :\\{scaled}
  \makeref unsorted 325 =macro
  \makeref uv 557 :$0\to \\{bistack\_size}$
  \makeref xy 557 :$0\to \\{bistack\_size}$
  \makeref x1 542 :\\{scaled}
  \makeref x2 542 :\\{scaled}
  \makeref x3 542 :\\{scaled}
  \makeref y1 542 :\\{scaled}
  \makeref y2 542 :\\{scaled}
  \makeref y3 542 :\\{scaled}
  }
\hbox{\nsize=\ht0 \advance\nsize-\topskip
  \divide\nsize by 3 \divide\nsize by\ninept
  \multiply\nsize by\ninept \advance\nsize\topskip
  \vsplit0 to\nsize \kern1pc
  \msize=\ht0 \advance\msize-\topskip
  \divide\msize by 2 \divide\msize by\ninept
  \multiply\msize by\ninept \advance\msize\topskip
  \vbox to\nsize{\vsplit0 to\msize\vss}\kern1pc
  \vbox to\nsize{\box0\vss}}

\bugonpage Dvii, line 9 (9/25/86)

{\tenpoint\noindent\hsize=29pc
{\sl Discrete and Computational Geometry\/ \bf1} (1986), 123--140.
\ \it Develops the theory\cutpar}

\bugonpage D2, line 27 (6/17/86)

\ninepoint\noindent\hskip10pt
{\bf define} $\\{banner}\equiv\hbox{\tt\char'23}$%
{\tt This\]is\]METAFONT,\]Version\]1.3\char'23}\quad
$\{\,$printed when \MF\ starts$\,\}$

\bugonpage D18, line 30 (5/22/86)

\ninepoint\noindent
\\{str\_ptr}: \\{str\_number};\quad
$\{\,$number of the current string being created$\,\}$

\bugonpage D66, line 6 (5/22/86)

\ninepoint\noindent
{\bf function\/}\  $\\{get\_node}(s:\\{integer})$: \\{pointer};\quad
$\{\,$variable-size node allocation$\,\}$

\bugonpage D66, lines 31--32 (3/16/86)

\tenpoint\noindent
controlled
growth helps to keep the \\{mem} usage consecutive when \MF\ is
implemented on ``virtual memory'' systems.

\bugonpage D101, line 2 (3/16/86)

\tenpoint\line{%
like `{\tt x}', or they can
combine the structural properties of arrays and records, like `{\tt x20a.b}'.
A}

\bugonpage D102, line 24 (3/16/86)

\tenpoint\line{\kern10pt
In other words, variables have a hierarchical structure that includes
enough threads running}

\bugonpage D142, line 23 (11/14/86)

\tenpoint\noindent
$(7-\sqrt{28}\,)/12$; the worst case
occurs for polynomials like $B(0,28-4\sqrt{28},14-5\sqrt{28},42)$.)

\bugonpage D178, third-last line (7/30/86)

\tenpoint\line{\quad
The following code maintains the invariant relations
$0\le \\{x0}<\max(\\{x1},\\{x1}+\\{x2})$, $\vert\\{x1}\vert<2↑{30}$,}

\bugonpage D228, line 13 (7/30/86)

\ninepoint\noindent\kern10pt
{\bf while} $\\{max\_coef}<\\{fraction\_half}$ {\bf do}

\smallskip\eightpoint\noindent
The mini-index at the bottom of the next page should also receive the following
new entry:
\smallskip\indent
$\\{fraction\_half}={\rm macro}$, \S105.

\bugonpage D248, lines 16--21 (11/27/86)

\ninepoint\noindent\kern10pt
$\\{alpha}\gets\\{abs}(u)$;\kern5pt
 $\\{beta}\gets\\{abs}(v)$;\par\noindent\kern10pt
{\bf if} $\\{alpha}<\\{beta}$ {\bf then}\par\noindent\kern20pt
{\bf begin} $\\{alpha}\gets\\{abs}(v)$;\kern5pt
 $\\{beta}\gets\\{abs}(u)$;\par\noindent\kern20pt
{\bf end};\quad$\{\,$now $\alpha=\max(\vert u\vert,\vert v\vert)$,
 $\beta=\min(\vert u\vert,\vert v\vert)\,\}$\par\noindent\kern10pt
{\bf if} $\\{internal}[\\{fillin}]\ne0$ {\bf then}\par\noindent\kern20pt
$d\gets d-\\{take\_fraction}(\\{internal}[\\{fillin}],
 \\{make\_fraction}(\\{beta}+\\{beta},\\{delta}))$;\par\noindent\kern10pt
$d\gets\\{take\_fraction}((d+4)\;{\bf div}\;8,\\{delta})$;\kern5pt
$\\{alpha}\gets\\{alpha}\;{\bf div}\;\\{half\_unit}$;

\bugonpage D263, line 20 (3/16/86)

\tenpoint\noindent
instead of \\{false}, the other routines will simply log the fact
that they have been called; they won't really display anything.
The standard test routines for \MF\ use this log information to check
that \MF\ is working properly, but the \\{wlog} instructions should be
removed from production versions of \MF.

\bugonpage D376, lines 17 and 18 (11/14/86)

\tenpoint\noindent
[these two mysterious lines should be deleted]

\bugonpage D463, line 10 (12/15/86)

\ninepoint\noindent\hskip30pt
({\tt"Pretend\]that\]you're\]Miss\]Marple:\]Examine\]all\]clues,"})

\bugonpage D474, 5th-last line (3/16/86)

\tenpoint\noindent
depths, or italic corrections) are sorted;
then the list of sorted values is perturbed, if necessary.

\bugonpage D481, line 12 (6/17/86)

\ninepoint\noindent\hskip10pt
\\{print\_nl}({\tt\char`\"Font\]metrics\]written\]on\]\char`\"});\kern5pt
\\{print}(\\{metric\_file\_name});\kern5pt
\\{print\_char}({\tt\char`\".\char`\"});

\noindent\hskip10pt\\{b\_close}(\\{tfm\_file})

\smallskip\eightpoint\noindent
The mini-index at the bottom of this page should also receive the following
new entry:
\smallskip\indent
\\{print\_char}: {\bf procedure}, \S58.

\bugonpage D510, new line to follow line 5 (6/17/86)

{\tenpoint\parindent=1em
This program doesn't bother to close the input files that may still be open.
\par}

\bugonpage D510, just before the fifth-last line (8/5/86)

\ninepoint\noindent\hskip30pt$\\{internal}[\\{fontmaking}]\gets0$;\quad
$\{\,$avoid loop in case of fatal error$\,\}$

\bugonpage D526, left column, lines 1--2 (7/30/86)

\eightpoint
\leftline{\indent\\{fraction\_half}:\quad
 $\underline{105}$, 111, 152, 288, 408, 496, 543,}
\leftline{\indent\qquad 1098, 1128, 1141.}

\bugonpage D526, left column, lines 6--7 (7/30/86)

\eightpoint
\leftline{\indent\qquad 478, 497, 499, 503, 530, 540, 547, 549, 599, 603,}
\leftline{\indent\qquad 612, 615, 815--816, 917, 1169--1170.}

\bugonpage D530, right column, line 45 (7/30/86)

\eightpoint
\leftline{\indent\\{max}:\quad$\underline{539}$, 543.}

\bugonpage D535, right column, line 27 (6/17/86)

\eightpoint
\leftline{\indent\qquad 1134, 1163--1165, 1182, 1194, 1200, 1205, 1213.}

\bugonpage D547, bottom two lines (11/27/86)

\ninepoint\noindent
[These lines, and the top two on the next page, should move down
so that they appear in alphabetical order just before `Compute
test coefficients'.]
% volume E
\hsize=29pc

\bugonpage Exiii, lines 1--2 (7/28/86)

\tenpoint\noindent
February 11--13, 1984), 49.
\ {\it An example meta-character of the Devanagari alphabet, worked out
``online'' with the help of Matthew Carter.}

\bugonpage Exiii, line 6 (7/28/86)

\tenpoint\noindent
{\it and western alphabets work also for Devanagari and Tamil.}

\bugonpage E12, lines 15 and 19 (7/23/86)

\tenpoint\noindent[change `17.32' to `17.28' in both places]

\bugonpage E12, third-last line (12/18/86)

\tenpoint\noindent[change `41' to `40']

\bugonpage E13, lines 3, 4, and 20 (12/18/86)

\tenpoint\noindent[change `40' to `41', `48' to `47', `17' to `7']

\bugonpage E18, line 20 (7/23/86)

\tenpoint\noindent[change `17.32' to `17.28']

\bugonpage E18, line 29 (12/9/86)

\tenpoint\noindent[change `236' to `212' in the {\tt cmss9} column]

\bugonpage E170, top illustration (11/2/86)

\tenpoint\noindent[There should be no ``dish'' or depression in the
vicinity of point {\tt 3r}; the top edge of the character should be
straight. This error appears also in the other uses of `\\{no\_dish\_serif}'
throughout the book, since the illustrations were made before
`\\{no\_dish\_serif}' was added to the program. See page
E180~(twice at the top), E370~(twice), E374~(twice), E376~(twice), E378~(top),
E390~(bottom), E398~(top), E402~(top), E406~(top), E453~(twice).]

\bugonpage E179, new line to be inserted after line 6 (10/13/86)

\ninepoint\noindent
{\bf if}  $\\{shaved\_stem}<\\{crisp}.\\{breadth}$:
  $\\{shaved\_stem}:=\\{crisp}.\\{breadth}$; {\bf fi}

\bugonpage E279, seventh line from the bottom (7/20/86)

\rightline{\eightssi that delicious but restrained humor which
 her readers found so irresistible.}

\bugonpage E554, bottom half of page (12/18/86)

\ninepoint\noindent[The letters will change slightly because of the
corrections to {\tt cmr17} noted on pages 12 and 13.]

\bugonpage E561, line 3 (12/9/86)

\ninepoint\noindent[The numerals should be `\thinspace
{\niness 0123456789}\thinspace' (i.e., 2/3 point less tall)
because of the correction made to page 18.]

\bugonpage E562, line 9 (12/9/86)

\ninepoint\noindent[The numerals should be `\thinspace
{\ninessi 0123456789\/}\thinspace' (i.e., 2/3 point less tall)
because of the correction made to page 18.]

\bugonpage E572, entry for {\it breadth} (10/13/86)

\eightpoint
{\it breadth}, 59, 75, 79, 91, 93, 179, 225, 233,

\bugonpage E573, entry for {\tt cmcsc10} (8/17/86)

\eightpoint
{\tt cmcsc10}, $\underline{30}$--$\underline{31}$, 567.

\bye
Now here are some that I will make soon!

Also, /18P/39L says "current mode", which may be a little misleading:

	@p procedure print_mode(@!m:integer); {prints the current mode}